home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / invest / preferences.py < prev    next >
Text File  |  2009-10-20  |  4KB  |  131 lines

  1. from gettext import gettext as _
  2. from os.path import join
  3. import gtk, gobject, gconf
  4. import invest
  5. from gettext import gettext as _
  6.  
  7. import cPickle
  8.  
  9. class PrefsDialog:
  10.     def __init__(self, applet):
  11.         self.ui = gtk.Builder()
  12.         self.ui.add_from_file(join(invest.BUILDER_DATA_DIR, "prefs-dialog.ui"))
  13.  
  14.         self.dialog = self.ui.get_object("preferences")
  15.         self.treeview = self.ui.get_object("stocks")
  16.  
  17.         self.ui.get_object("add").connect('clicked', self.on_add_stock)
  18.         self.ui.get_object("add").connect('activate', self.on_add_stock)
  19.         self.ui.get_object("remove").connect('clicked', self.on_remove_stock)
  20.         self.ui.get_object("remove").connect('activate', self.on_remove_stock)
  21.         self.treeview.connect('key-press-event', self.on_tree_keypress)
  22.  
  23.         self.typs = (str, str, float, float, float)
  24.         self.names = (_("Symbol"), _("Label"), _("Amount"), _("Price"), _("Commission"))
  25.         store = gtk.ListStore(*self.typs)
  26.         store.set_sort_column_id(0, gtk.SORT_ASCENDING)
  27.         self.treeview.set_model(store)
  28.         self.model = store
  29.  
  30.         def on_cell_edited(cell, path, new_text, col, typ):
  31.             try:
  32.                 if col == 0:    # stock symbols must be uppercase
  33.                     new_text = str.upper(new_text)
  34.                 store[path][col] = typ(new_text)
  35.             except:
  36.                 pass
  37.  
  38.         def get_cell_data(column, cell, model, iter, data):
  39.             typ, col = data
  40.             if typ == int:
  41.                 cell.set_property('text', "%d" % typ(model[iter][col]))
  42.             elif typ == float:
  43.                 cell.set_property('text', "%.2f" % typ(model[iter][col]))
  44.             else:
  45.                 cell.set_property('text', typ(model[iter][col]))
  46.  
  47.         def create_cell (view, column, name, typ):
  48.             cell_description = gtk.CellRendererText ()
  49.             cell_description.set_property("editable", True)
  50.             cell_description.connect("edited", on_cell_edited, column, typ)
  51.             column_description = gtk.TreeViewColumn (name, cell_description)
  52.             if typ == str:
  53.                 column_description.set_attributes (cell_description, text=column)
  54.                 column_description.set_sort_column_id(column)
  55.             if typ == float:
  56.                 column_description.set_cell_data_func(cell_description, get_cell_data, (float, column))
  57.             view.append_column(column_description)
  58.  
  59.  
  60.         for n in xrange (0, 5):
  61.             create_cell (self.treeview, n, self.names[n], self.typs[n])        
  62.         stock_items = invest.STOCKS.items ()
  63.         stock_items.sort ()
  64.         for key, data in stock_items:
  65.             label = data["label"]
  66.             purchases = data["purchases"]
  67.             for purchase in purchases:
  68.                 store.append([key, label, purchase["amount"], purchase["bought"], purchase["comission"]])
  69.  
  70.         try:
  71.             pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(join(invest.ART_DATA_DIR, "invest-16.png"), -1,-1)
  72.             self.dialog.set_icon(pixbuf)
  73.         except Exception, msg:
  74.             invest.debug("Could not load 'invest-16.png' file: %s" % msg)
  75.             pass
  76.  
  77.         self.sync_ui()
  78.  
  79.     def show_run_hide(self, explanation = ""):
  80.         expl = self.ui.get_object("explanation")
  81.         expl.set_markup(explanation)
  82.         self.dialog.show_all()
  83.         if explanation == "":
  84.             expl.hide()
  85.         self.dialog.run()
  86.         self.dialog.destroy()
  87.  
  88.         invest.STOCKS = {}
  89.  
  90.         def save_symbol(model, path, iter):
  91.             #if int(model[iter][1]) == 0 or float(model[iter][2]) < 0.0001:
  92.             #    return
  93.  
  94.             if not model[iter][0] in invest.STOCKS:
  95.                 invest.STOCKS[model[iter][0]] = { 'label': model[iter][1], 'purchases': [] }
  96.                 
  97.             invest.STOCKS[model[iter][0]]["purchases"].append({
  98.                 "amount": float(model[iter][2]),
  99.                 "bought": float(model[iter][3]),
  100.                 "comission": float(model[iter][4]),
  101.             })
  102.         self.model.foreach(save_symbol)
  103.         try:
  104.             cPickle.dump(invest.STOCKS, file(invest.STOCKS_FILE, 'w'))
  105.             invest.debug('Stocks written to file')
  106.         except Exception, msg:
  107.             invest.error('Could not save stocks file: %s' % msg)
  108.  
  109.  
  110.     def sync_ui(self):
  111.         pass
  112.  
  113.     def on_add_stock(self, w):
  114.         iter = self.model.append(["GOOG", "Google Inc.", 0, 0, 0])
  115.         path = self.model.get_path(iter)
  116.         self.treeview.set_cursor(path, self.treeview.get_column(0), True)
  117.  
  118.     def on_remove_stock(self, w):
  119.         model, paths = self.treeview.get_selection().get_selected_rows()
  120.         for path in paths:
  121.             model.remove(model.get_iter(path))
  122.  
  123.     def on_tree_keypress(self, w, event):
  124.         if event.keyval == 65535:
  125.             self.on_remove_stock(w)
  126.  
  127.         return False
  128.  
  129. def show_preferences(applet, explanation = ""):
  130.     PrefsDialog(applet).show_run_hide(explanation)
  131.